home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / 3DDEMO.ZIP / 3D / INCLUDE / VOXEL.HPP < prev   
C/C++ Source or Header  |  1996-07-21  |  3KB  |  110 lines

  1. #ifndef __VOXEL__
  2.  
  3. #include <stdio.h>
  4. #include <math.h>
  5. #include "defines.hpp"
  6. #include "video.hpp"
  7. #include "input.hpp"
  8.  
  9. // Copyright (c) 1996 by Kerrigan Burgess, all rights reserved.
  10.  
  11. extern void Error(char *fmt, ...);
  12.  
  13. extern "C" {
  14.  
  15. extern unsigned char *_Skymap;
  16. extern unsigned char *_Colormap;
  17. extern unsigned char *_ShadowmapPtr;
  18. extern unsigned char *_ShadowPAL;
  19. extern unsigned char *_Buffer;
  20. extern long          *_Heightmap;
  21. extern long           _SKYHEIGHT;
  22. extern long           _SkyHoriz;
  23. extern long           _SkyLimit;
  24. extern long           _LeftCos;
  25. extern long           _RightCos;
  26. extern long           _LeftSin;
  27. extern long           _RightSin;
  28. extern long           _vx;
  29. extern long           _vy;
  30. extern long           _x;
  31. extern long           _y;
  32. extern long           _z;
  33. extern long           _dx;
  34. extern long           _dy;
  35. extern long           _dz;
  36. extern long           _col;
  37. extern long           _kVScale;
  38.  
  39. void RenderSkyLine(void);
  40. void CastRay(void);
  41.             
  42. long GetOffset(long u,long v);
  43. #pragma aux GetOffset parm [ecx] [edx]\
  44.             modify [edi edx]\
  45.             value [ebx];
  46.  
  47. long GetOffset2(long u,long v);
  48. #pragma aux GetOffset2 parm [ecx] [edx]\
  49.             modify [edi edx]\
  50.             value [ebx];
  51. }
  52.  
  53. extern int SCREENHEIGHT;
  54. extern int SCREENWIDTH;
  55.  
  56. const float ANGULAR_INCREMENT  = 0.17578;      
  57.  
  58. class VOXELCLASS {
  59.  
  60.   friend class FILESYSTEMCLASS;
  61.  
  62.   private:
  63.   
  64.   #define ANGLE_MASK 0x7FF           // mask out upper bits, modulus.
  65.   #define ANGLE_360 0x800            // 2048 angular increments.
  66.   #define ANGLE_180 ANGLE_360/2
  67.   #define ANGLE_90  ANGLE_180/2
  68.   #define ANGLE_60  ANGLE_360/6
  69.   #define ANGLE_45  ANGLE_90/2
  70.   #define ANGLE_30  ANGLE_360/12
  71.   #define ANGLE_15  ANGLE_30/2
  72.   #define ANGLE_5   ANGLE_30/6
  73.   #define ANGLE_0   0
  74.  
  75.   #define KVSCALE 0x600              // quick way to inc/dec size of mountains.
  76.  
  77.   #define VIEWDISTANCE (250<<8)      // View Distance in 24:8 format.
  78.  
  79.   #define YAWACCEL ANGLE_5
  80.   #define MAXALTITUDE (600<<16)
  81.   #define MINALTITUDE (10<<16)
  82.  
  83.   #define DEFAULTPITCH 120           // 200-80.
  84.   #define DEFAULTSPEED 2048          // fixed 16:16
  85.   #define PITCHSPEED 4
  86.   #define SKYHEIGHT 60*VIEWDISTANCE  // put together so we don't have to mult later.
  87.   #define VIEWSPEED 8
  88.  
  89.   long  COS[ANGLE_360],
  90.         SIN[ANGLE_360];
  91.  
  92.   unsigned char *ShadowLeft,*ShadowCenter,*ShadowRight;
  93.  
  94.   long Yaw,Altitude,Pitch,Speed,viewpoint_x,viewpoint_y;
  95.  
  96.   public:
  97.     VOXELCLASS(void);
  98.     ~VOXELCLASS(void);
  99.  
  100.     void CreateDataBase(VIDEOCLASS *Video);
  101.     void RenderSky(void);
  102.     void RenderView(unsigned char *DoubleBuffer);
  103.     void HandleInput(INPUTCLASS *Input);
  104.     void CheckCrashed(void);
  105.  
  106. };
  107.  
  108. #define __VOXEL__
  109. #endif
  110.